package com.example.orderflow.mappers;

import com.example.orderflow.entity.po.ApproveHistory;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 *  数据库操作接口
 */
@Mapper
public interface ApproveHistoryMapper<T,P> extends BaseMapper<T,P> {

	/**
	 * 根据Id更新
	 */
	 Integer updateById(@Param("bean") T t,@Param("id") Integer id);


	/**
	 * 根据Id删除
	 */
	 Integer deleteById(@Param("id") Integer id);


	/**
	 * 根据Id获取对象
	 */
	 T selectById(@Param("id") Integer id);

	/**
	 * 根据订单编号、当前等级和执行人名称获取对象
	 */
	T selectByOrderIdAndLevelIdAndApproveBy(@Param("orderId") String orderId,
											@Param("levelId") String levelId,
											@Param("approveBy") String approveBy);

	/**
	 * 根据订单编号、当前等级、执行人名称和对象状态获取对象
	 */
	T selectByOrderIdAndLevelIdAndApproveByAndObjectState(@Param("orderId") String orderId,
											@Param("levelId") String levelId,
											@Param("approveBy") String approveBy,
											@Param("objectState") String objectState);

	/**
	 * 根据订单编号、当前等级获取审批状态
	 */
	List<String> selectApproveStatusByOrderIdAndLevelIdAndObjectState1(@Param("orderId") String orderId,
																	   @Param("levelId") String levelId,
																	   @Param("objectState") String objectState);

	/**
	 * 根据订单编号、当前等级id删除对象
	 */
	Integer deleteByOrderIdAndLevelId(@Param("orderId") String orderId,
									  @Param("levelId") String levelId);


	/**
	 * 根据根据订单编号、当前等级id更新对象状态
	 */
	Integer updateApproveHistoriesObjectStateAndApproveTimeByOrderIdAndLevelId(@Param("objectState") String objectState,
												 @Param("approveTime") String approveTime,
												 @Param("orderId") String orderId,
												 @Param("levelId") String levelId);

	/**
	 * 根据审批人、对象状态查找所有符合条件的对象的订单编号
	 */
	List<String> findOrderIdsByApproveByAndObjectState(@Param("approveBy") String approveBy,
														 @Param("objectState") String objectState);

	/**
	 * 根据审批人、审批结果查找所有符合条件的对象的订单编号
	 */
	List<String> findOrderIdsByApproveByAndApproveStatus(@Param("approveBy") String approveBy,
														 @Param("approveStatus") String approveStatus);

	/**
	 * 根据根据订单编号、当前等级id更新对象状态
	 */
	Integer updateApproveHistoriesObjectStateAndApproveTimeByOrderId(@Param("objectState") String objectState,
																			   @Param("approveTime") String approveTime,
																			   @Param("orderId") String orderId);

	/**
	 * 根据根据订单编号查询所有复合的条目
	 */
	List<T> findApproveHistoryByOrderId(@Param("orderId") String orderId);

}
